热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

下图|加号_Flink1.9.2源码编译和使用

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Flink1.9.2源码编译和使用相关的知识,希望对你有一定的参考价值。欢迎访

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Flink1.9.2源码编译和使用相关的知识,希望对你有一定的参考价值。



欢迎访问我的GitHub


为什么要编译flink源码



  • 用于学习,在IDEA上开发的flink job,能直接在IDEA运行,如果运行时依赖的flink框架是我们自己编译构建的,就做到了从业务到框架都可以修改源码并验证,起到了很好的学习和动手实践效果;


环境信息



  1. 电脑:2019版13寸MacBook Pro,2.3 GHz 四核Intel Core i5,8 GB 2133 MHz LPDDR3

  2. 操作系统:macOS Catalina 10.15.3

  3. JDK:1.8.0_211

  4. Maven:3.6.0

  5. IDEA:2018.3.5 (Ultimate Edition)


关于正版IDEA



  • 如何免费使用正版IDEA,可以参考《免费申请和使用IntelliJ IDEA商业版License指南》


全文概览



  • 今天的实战由以下内容组成:



  1. 开发一个最简单的flink任务,在IDEA上以local模式运行;

  2. 下载flink1.9.2源码;

  3. 修改flink1.9.2源码,并且编译构建;

  4. 设置,让步骤1中的flink任务用上刚刚编译的flink1.9.2框架;

  5. 再次运行flink任务,验证修改后的flink框架是否生效;


IDEA上运行flink job工程



  • 在IDEA上创建flink job的maven工程并运行,请参考《IDEA上运行Flink任务》

  • 假设您已按上面的步骤在IDEA建好了flink job工程;

  • 运行起来,在浏览器打开flink页面,如下图,绿框中显示一共有8个Task Slot:

  • 之所以会有8个Task Slot,和下图红框中的代码有关,这是段flink框架源码(StreamExecutionEnvironment.java),入参 parallelism 是CPU核数,我这里是开了超线程的四核i5处理器,所以 parallelism 等于8:

  • 今天的目标就是修改上图红框中的源码,然后在网页上看是不是生效了(Task Slot数量从8改成5);


准备工作



  • maven中央仓库地址建议用阿里云的,否则会经常遇到jar下载超时错误,地址:http://192.168.50.43:8081/repository/aliyun-proxy/

  • flink1.9.2源码的maven工程依赖了一个中央仓库没有的jar,GAV是io.confluent:kafka-schema-registry-client:3.3.1,您需要下载下来在本地仓库做 mvn install 操作,下载地址:http://packages.confluent.io/maven/io/confluent/kafka-schema-registry-client/3.3.1/kafka-schema-registry-client-3.3.1.jar

  • 上述准备工作都需要您在本地maven上操作,但是如果您的条件允许,还是强烈推荐在内网搭建maven私服nexus3,参考:《群晖DS218+做maven私服(nexus3)》、《Ubuntu部署和体验Nexus3》、《Nexus3常用功能备忘》


下载flink1.9.2源码



  • flink1.9.2源码的下载地址:http://ftp.jaist.ac.jp/pub/apache/flink/flink-1.9.2/flink-1.9.2-src.tgz


修改和编译构建



  • 将下载好的flink-1.9.2-src.tgz解压,得到文件夹flink-1.9.2

  • 打开这个文件:flink-1.9.2/flink-streaming-java/src/main/java/org/apache/flink/streaming/api/environment/StreamExecutionEnvironment.java

  • 如下图红框,找到 createLocalEnvironment 方法,把 setParallelism 的入参改成一个固定的数字(每个Task Slot都要分配内存,所以这个数字请不要改得太大,否则启动flink就会报错了,我这里改成了5):

  • 在文件夹 flink-1.9.2 下,执行编译构建的命令: mvn clean install -DskipTests -Dfast

  • 经历漫长等待后提示构建成功:

  • 确认这个文件已生成,稍后就要用到: flink-1.9.2/flink-dist/target/flink-dist_2.11-1.9.2.jar


设置



  • 为了用上刚刚构建出来的flink框架jar,要做些设置,打开之前运行的flink job应用,在项目上点击右键,点击菜单 Open Module Settings ,如下图:

  • 接下来要做三个和jar有关的操作,注意每一步都很重要:

  • 下图红框1中的flink-dist_2.11-1.9.2.jar文件,是《IDEA上运行Flink任务》一文中添加的,目的是提供网页服务,现在将其删除,操作如下图红框所示:

  • 下图红框1中的maven依赖: org.apache.flink:flink-streaming-java_2.11:1.9.2 ,也请删除,操作如下图红框所示:

  • 点击下图红框中的加号:

  • 在弹出的窗口选中刚才构建好的文件 flink-1.9.2/flink-dist/target/flink-dist_2.11-1.9.2.jar

  • 记得点击右下角的OK按钮保存,修改完毕,接下来验证咱们修改的flink框架源码是否生效了


验证



  • 当前flink job工程来自《IDEA上运行Flink任务》一文,StreamingJob的工作是读取本机18081端口的数据,所以我们要把18081端口的服务启动起来,不然StreamingJob运行时是连不上端口的,打开一个控制台,执行命令: nc -l 18081

  • 现在可以将StreamingJob运行起来,如下图,右键点击StreamingJob,选择Run StreamingJob.main():即可启动flink任务:

  • 在IDEA的控制台搜索关键字 localhost ,如下图红框,可以查到flink网页的端口,我这里是 52704

  • 浏览器访问 http://localhost:52704 ,如下图红框,Total Task Slots数量是5,我们修改的flink1.9.2的源码生效了:

  • 至此,Flink1.9.2的源码从修改到编译构建,再到验证都已经完成了,如果您也在学习flink,希望本文能给您一些参考,一起来动手实战吧;


欢迎关注51CTO博客:程序员欣宸


推荐阅读
  • 在本地环境中部署了两个不同版本的 Flink 集群,分别为 1.9.1 和 1.9.2。近期在尝试启动 1.9.1 版本的 Flink 任务时,遇到了 TaskExecutor 启动失败的问题。尽管 TaskManager 日志显示正常,但任务仍无法成功启动。经过详细分析,发现该问题是由 Kafka 版本不兼容引起的。通过调整 Kafka 客户端配置并升级相关依赖,最终成功解决了这一故障。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 如何使用 `org.eclipse.rdf4j.query.impl.MapBindingSet.getValue()` 方法及其代码示例详解 ... [详细]
  • C++ 开发实战:实用技巧与经验分享
    C++ 开发实战:实用技巧与经验分享 ... [详细]
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • com.hazelcast.config.MapConfig.isStatisticsEnabled()方法的使用及代码示例 ... [详细]
  • 深入解析:Synchronized 关键字在 Java 中对 int 和 Integer 对象的作用与影响
    深入探讨了 `Synchronized` 关键字在 Java 中对 `int` 和 `Integer` 对象的影响。尽管初看此题似乎简单,但其实质在于理解对象的概念。根据《Java编程思想》第二章的观点,一切皆为对象。本文详细分析了 `Synchronized` 关键字在不同数据类型上的作用机制,特别是对基本数据类型 `int` 和包装类 `Integer` 的区别处理,帮助读者深入理解 Java 中的同步机制及其在多线程环境中的应用。 ... [详细]
  • 如何使用 `org.apache.tomcat.websocket.server.WsServerContainer.findMapping()` 方法及其代码示例解析 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • Android中将独立SO库封装进JAR包并实现SO库的加载与调用
    在Android开发中,将独立的SO库封装进JAR包并实现其加载与调用是一个常见的需求。本文详细介绍了如何将SO库嵌入到JAR包中,并确保在外部应用调用该JAR包时能够正确加载和使用这些SO库。通过这种方式,开发者可以更方便地管理和分发包含原生代码的库文件,提高开发效率和代码复用性。文章还探讨了常见的问题及其解决方案,帮助开发者避免在实际应用中遇到的坑。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
author-avatar
刘伟亮
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有